let express = require("express");

let { Article } = require("../model/index.js");

// ****1-创建一个路由中间件，来管理 文章相关的路由

let router = express.Router();

// ****2-在文章路由中间件 处理 文章相关的路由操作

// 1-获取所有文章，pagenum pagesize 分页，
// 返回 接口 参数值
// get /articles?pagenum=1&pagesize=10&title=鞋
router.get("/", async (req, res) => {
  // 获取 搜索参数中 页码 和 页大小 ,设置 这个两个参数的默认值
  let pagesize = req.query.pagesize || 10;
  let pagenum = req.query.pagenum || 1;
  let title = req.query.title ?? "";
  // let uid = req.query.uid;
  console.log(pagesize, pagenum);
  // req.auth.id  当前登录用的id

  let r = await Article.find({ title: new RegExp(title) })
    // 按照创建时间 降序
    .sort({ createdAt: -1 })
    // 分页操作
    .skip((pagenum - 1) * pagesize)

    .limit(pagesize);

  res.json({
    params: { pagenum, pagesize },
    data: r,
    msg: "-获取所有文章，",
  });
});
// 2- 动态id根据文章id 获取文章详情，返回 接口作用，和 文章id
// get /articles/:aid
router.get("/:aid", async (req, res) => {
  // 搜索参数 获取文章aid  req.params.aid
  let r = await Article.findByIdAndUpdate(
    req.params.aid,
    // 浏览量自增1
    { $inc: { views: 1 } },
    // 不去修改  文章的更新时间,获取最新的 文章的数据
    { timestamps: false, new: true }
  );

  res.json({
    params: req.params,
    data: r,
    msg: "动态id根据文章id 获取文章详情",
  });
});
// 3-根据文章id 删除文章 ，返回 接口作用和文章id
// delete /articles/:id
router.delete("/:id", (req, res) => {
  Article.findByIdAndDelete(req.params.id).then((r) => {
    res.json({
      params: req.params,
      msg: "根据文章id 删除文章",
    });
  });
});
// 4- patch-根据文章id 修改文章 ，返回 接口作用和文章id 和要修改的内容
// delete /articles/:aid

router.patch("/:aid", (req, res) => {
  req.params.id; //文章的id
  req.body; //修改的内容 在请求体中
  //
  Article.findByIdAndUpdate(req.params.aid, req.body).then((r) => {
    res.json({
      // params: req.params,
      // data: req.body,
      msg: "-根据文章id 修改文章 ",
      code: 1,
    });
  });
});
// 5- 发布文章
//  post请求    返回 接口作用和 和发布的内容 title content
//  {code:1,msg:'发布，发布的内容'}

//
// 用户id 可以从token解析出来
// 其他参数都存入请求体
router.post("/", (req, res) => {
  // req.auth.id
  console.log(req.auth.id);
  req.body;
  // post提交过来数据 存储到数据库中
  let art = new Article({
    author_id: req.auth.id,
    ...req.body, //把body对象中属性，全部添加到 当前的新对象中
  });
  art.save().then((r) => {
    console.log(r);
    res.json({
      data: r,
      msg: "发布文章 ",
    });
  });
});

// ******3-导出文章路由中间件
module.exports = router;
